package design_6_adapter.demo1.handler;

import design_6_adapter.demo1.util.ClassUtil;

import java.util.List;

/**
 * 接口适配器
 */
public interface HandlerAdapter {


	/**
	 * 验证当前适配器是否可用，可用的话返回true，不可用返回false
	 *
	 * @param uri
	 * @return
	 */
	boolean supports(String uri);


	/**
	 * 通过适配器获取资源并返回 （返回html模板 / json 串 /xml 串 / 静态资源流信息等）
	 *
	 * @param uri
	 * @return
	 */
	Object handle(String uri);


	/**
	 * 获取 适配器 (获取目标)
	 *
	 * @param uri
	 * @return
	 */
	default HandlerAdapter getHandlerAdapter(String uri) {
		List<Class> allClassByInterface = ClassUtil.getAllClassByInterface(HandlerAdapter.class);
		for (Class<?> clazz : allClassByInterface) {
			try {
				HandlerAdapter handlerAdapter = (HandlerAdapter) clazz.newInstance();
				if (handlerAdapter.supports(uri)) {
					System.out.println("成功获取到适配器：" + clazz.getSimpleName());
					return handlerAdapter;
				}
			} catch (InstantiationException e) {
				e.printStackTrace();
			} catch (IllegalAccessException e) {
				e.printStackTrace();
			}
		}
		throw new RuntimeException("404 没有指定的请求配置");
	}
}
